I2C Communication এর ধারণা

Computer Programming - আরডুইনো (Arduino) I2C এবং SPI Communication (I2C and SPI Communication in Arduino) |
290
290

I2C (Inter-Integrated Circuit) একটি কম্পিউনিকেশন প্রোটোকল যা একাধিক ডিভাইসের মধ্যে ডেটা আদান-প্রদানের জন্য ব্যবহৃত হয়। এটি মূলত সংক্ষিপ্ত দূরত্বে বিভিন্ন ডিভাইসকে সংযুক্ত করার জন্য ডিজাইন করা হয়েছে এবং সাধারণত সেন্সর, মেমরি চিপ, মাইক্রোকন্ট্রোলার ইত্যাদি ডিভাইসের মধ্যে ডেটা ট্রান্সফারে ব্যবহৃত হয়।

I2C Communication এর মূল বৈশিষ্ট্য

  • মাল্টি-মাস্টার এবং মাল্টি-স্লেভ সিস্টেম: একটি I2C বাসে একাধিক মাস্টার এবং স্লেভ ডিভাইস থাকতে পারে, তবে সাধারণত একটি মাস্টার ডিভাইস থাকে যা ডেটা ট্রান্সফারের দায়িত্বে থাকে।
  • দুইটি প্রধান লাইন:
    • SDA (Serial Data Line): ডেটা আদান-প্রদানের জন্য ব্যবহৃত হয়।
    • SCL (Serial Clock Line): ক্লক সংকেত পাঠানোর জন্য ব্যবহৃত হয়।
  • উপাদান সংখ্যা: সাধারণত ১০০৮টি ডিভাইস একটি I2C বাসে সংযুক্ত হতে পারে।
  • সিঙ্ক্রোনাস যোগাযোগ: I2C প্রোটোকল সিঙ্ক্রোনাস যোগাযোগ ব্যবহার করে, যা ক্লক সংকেতের মাধ্যমে নিয়ন্ত্রিত হয়।

I2C এর কাজের প্রক্রিয়া

I2C যোগাযোগের সময় একটি ডিভাইস মাস্টার হিসেবে কাজ করে এবং অন্যান্য ডিভাইস স্লেভ হিসেবে কাজ করে। মাস্টার ডিভাইস SDA এবং SCL লাইনের মাধ্যমে ডেটা এবং ক্লক সংকেত পাঠায়। স্লেভ ডিভাইসগুলি মাস্টার ডিভাইসের সিগন্যাল অনুসরণ করে ডেটা পাঠায় বা গ্রহণ করে।

কমিউনিকেশন প্রক্রিয়া:

  1. মাস্টার ডিভাইস প্রথমে একটি স্টার্ট কন্ডিশন পাঠায় (SDA লাইন LOW থেকে HIGH হয়ে যায় যখন SCL লাইন HIGH থাকে)।
  2. মাস্টার স্লেভের সাথে যোগাযোগের জন্য স্লেভ ডিভাইসের ঠিকানা পাঠায়।
  3. স্লেভ ডিভাইসটি ACK (Acknowledgement) সিগন্যাল পাঠিয়ে তার উপস্থিতি নিশ্চিত করে।
  4. ডেটা ট্রান্সফার শুরু হয়।
  5. মাস্টার ডিভাইস ডেটা ট্রান্সফার শেষ হলে স্টপ কন্ডিশন পাঠায় (SDA লাইন HIGH থেকে LOW হয়ে যায় যখন SCL লাইন HIGH থাকে)।

Arduino তে I2C Communication

Arduino তে I2C কমিউনিকেশন পরিচালনা করতে Wire লাইব্রেরি ব্যবহার করা হয়। এটি I2C ডিভাইসের সাথে সহজে যোগাযোগ স্থাপন করতে সহায়তা করে।

Wire লাইব্রেরি ব্যবহার

Arduino তে I2C ব্যবহার করার জন্য Wire.h লাইব্রেরি ব্যবহার করা হয়। উদাহরণ:

মাস্টার ডিভাইস কোড:

#include <Wire.h>

void setup() {
  Wire.begin(); // I2C মাস্টার হিসেবে শুরু
  Serial.begin(9600);
}

void loop() {
  Wire.beginTransmission(8); // স্লেভ ডিভাইসের ঠিকানা (8)
  Wire.write("Hello"); // ডেটা পাঠানো
  Wire.endTransmission(); // ট্রান্সমিশন শেষ
  delay(1000);
}

স্লেভ ডিভাইস কোড:

#include <Wire.h>

void setup() {
  Wire.begin(8); // স্লেভ হিসেবে শুরু, ঠিকানা 8
  Wire.onReceive(receiveEvent); // ডেটা গ্রহণের ইভেন্ট সেট করা
  Serial.begin(9600);
}

void receiveEvent(int howMany) {
  while (Wire.available()) {
    char c = Wire.read(); // ডেটা পড়া
    Serial.print(c);
  }
  Serial.println();
}

void loop() {
  // স্লেভ লুপে কিছু করবে না
}

ব্যবহারিক প্রয়োগ

  • সেন্সর ডেটা সংগ্রহ: I2C যোগাযোগ ব্যবহার করে বিভিন্ন সেন্সর (যেমন, তাপমাত্রা, প্রেসার, জাইরোস্কোপ) থেকে ডেটা সংগ্রহ করা যায়।
  • ডিসপ্লে ডিভাইস: OLED বা LCD ডিসপ্লে I2C মাধ্যমে নিয়ন্ত্রণ করা যায়।
  • মাল্টি-ডিভাইস সিস্টেম: একই বাসে একাধিক ডিভাইস সংযুক্ত করে মাল্টি-ডিভাইস কমিউনিকেশন করা যায়।

I2C এর সুবিধা

  • কম সংখ্যক সংযোগ লাইন: শুধুমাত্র দুটি লাইন ব্যবহার করে অনেক ডিভাইস সংযুক্ত করা যায়।
  • সিঙ্ক্রোনাস যোগাযোগ: ক্লক লাইন ব্যবহার করে ডেটা সিঙ্ক্রোনাইজ করা হয়।
  • সহজ ইন্টারফেস: প্রোগ্রামিং সহজ এবং দ্রুত ডেটা আদান-প্রদান করা যায়।

সীমাবদ্ধতা

  • গতি সীমিত: অন্যান্য কমিউনিকেশন প্রোটোকলের তুলনায় গতি কিছুটা কম।
  • দূরত্ব সীমাবদ্ধ: সংক্ষিপ্ত দূরত্বে কার্যকর।
  • ডিভাইস সংখ্যা সীমা: একটি নির্দিষ্ট সংখ্যা পর্যন্ত ডিভাইস সংযুক্ত করা সম্ভব।

I2C কমিউনিকেশন Arduino এবং অন্যান্য ডিভাইসের মধ্যে ডেটা আদান-প্রদানের জন্য একটি নির্ভরযোগ্য এবং কার্যকর মাধ্যম। এটি বিভিন্ন প্রোজেক্টে সেন্সর, ডিসপ্লে এবং অন্যান্য মডিউল সংযুক্ত করতে বহুল ব্যবহৃত হয়।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion